package day18.Exer;
/**
 * 假设有个Socket服务器，提供查询气温，风力，pm2.5,湿度等气象服务，请设计服务端和客户端实现，提供退出功能，并使用多线程防止服务端堵塞。
 * 客户端选择要查询的类型，是气温，还是其他，服务端返回相应的值，并加上当前的日期（用yyyy-MM-dd hh:mm:ss格式），
 * 服务端通过多线程的方式提高性能,客户端发送和接收统一采用字符串格式
 * 用多线程提高响应速度
 */

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class weatherServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(8888);
        System.out.println("服务器已启动");
        try {
            while (true) {
                new MyThread(serverSocket.accept()).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    static class MyThread extends Thread{
        private final Socket socket;

        public MyThread(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            System.out.println(socket+"连接了。");
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            Date date=new Date();
            String now=sdf.format(date);
            Map weather=new HashMap();
            weather.put("气温","19.0℃");
            weather.put("风力","2级");
            weather.put("pm2.5","33.0微克/立方米");
            weather.put("湿度","80%");
            try {
                while (true) {
                    InputStream is=socket.getInputStream();
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String str=br.readLine();
                    if (!("exit").equals(str)) {
                        PrintWriter pw=new PrintWriter(socket.getOutputStream());
                        if(weather.containsKey(str)){
                            pw.println(str+":"+weather.get(str)+"现在时间:"+now);
                            pw.flush();
                        }else{
                            pw.println("没有查到"+str);
                            pw.flush();
                        }
                    }else{
                        return;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
